package com.bjsxt.controller;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.bjsxt.pojo.Admin;
import com.bjsxt.pojo.Menu;
import com.bjsxt.pojo.Result;
import com.bjsxt.pojo.TreeResult;
import com.bjsxt.service.IMenuService;
import com.sun.source.tree.Tree;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author ${author}
 * @since 2022-02-22
 */
@Controller
@RequestMapping("/menu")
public class MenuController {
    //声明业务层属性
    @Autowired
    private IMenuService menuService;
    //声明单元方法：加载菜单信息
    @ResponseBody
    @RequestMapping("menuInfo")
    public List<TreeResult> menuInfo(@RequestParam(defaultValue = "0") String id, HttpSession session){
        //处理请求
            //获取session中的用户的ID
        Admin admin=(Admin) session.getAttribute("admin");
        Integer aid=admin.getAid();
            //调用业务层获取当前登录的用户的菜单信息
        List<TreeResult> list=menuService.selMenuInfoService(id,aid);
        //响应请求
        return list;
    }
    //声明单元方法：加载所有的菜单信息
    @ResponseBody
    @RequestMapping("menuAllInfo")
    public List<TreeResult> menuAllInfo(@RequestParam(defaultValue = "0") String id){
        //处理请求
        //调用业务层获取菜单信息
        List<TreeResult> list=menuService.selAllMenuInfoService(id);
        //响应请求
        return list;
    }
    //声明单元方法：加载所有的菜单信息，按照指定层级关系组装后返回
    @ResponseBody
    @RequestMapping("menuAllInfo2")
    public List<TreeResult> menuAllInfo2(@RequestParam(defaultValue = "0") String id){
        //处理请求
        //调用业务层获取菜单信息
        List<TreeResult> list=menuService.selAllMenuInfoService2();
        //响应请求
        return list;
    }
    //声明单元方法：增加菜单节点
    @ResponseBody
    @RequestMapping("menuAdd")
    public Result menuAdd(Menu menu){
        //处理请求
        Boolean insert=false;
        menu.setStatus("0");
        //判断父id是否为空
        if (menu.getPid()==null){//为空，直接插入数据
            menu.setPid(0);
            menu.setIsparent("1");
            insert=menu.insert();
        }else{//不为空，要进行父节点的更新
            menu.setIsparent("0");
            insert=menu.insert();
            //更新父节点
            UpdateWrapper<Menu> updateWrapper=new UpdateWrapper<>();
            updateWrapper.set("isparent",1);
            updateWrapper.eq("mid",menu.getPid());
            menuService.update(updateWrapper);
        }
        //响应结果
        return new Result(insert,insert? "添加菜单成功":"添加菜单失败");
    }
    //声明单元方法：编辑菜单
    @ResponseBody
    @RequestMapping("menuEdit")
    public Result menuEdit(Menu menu){
        //处理请求
        boolean b = menu.updateById();
        //响应结果
        return new Result(b,b?"编辑成功":"编辑失败");
    }
    //声明单元方法：删除菜单
    @ResponseBody
    @RequestMapping("menuDelete")
    public Result menuDelete(Menu menu){
        //处理请求
        Result result=menuService.deleteMenuInfo(menu);
        //响应结果
        return result;
    }

}

